В скриптах напрямую доступны все данные Quik'а, кроме греков с доски опционов. Но есть возможность рассчитывать их по формуле Блэка-Шоулза, исходя из доступных значений базы, страйка, дюрации и волатильности.
Чтобы удостовериться в совпадении греков с доски и расчётных, пришлось в скрипте отваять на Lua C API сервер DDE для приёма экспорта от доски опционов. И вот картинка
Разница в самом главном Греке — Дельте — менее 1%.
Через Lua в Quik'е доступны все возможности Windows.
local Titles, Entries, Desk = {}, {}, {}
local Wn1_Hndl
local Wn1_Field1, Wn1_Field2, Wn1_Field3, Wn1_Field4, Wn1_Field5
= "Код CALL", "Страйк", "Дельта CALL", "Дельта расч", "Теор. расч"
function OnInit (scriptPath)
qu = require ("QuikUtil(qu)") -- qc, lu, tu
blk = require ("BlackScholes(blk)")
glb_ScriptDir, glb_ScriptName = lu.SplitPath (scriptPath)
message (glb_ScriptName .." started")
server = require ("OptionDesk")
end -- OnInit()
function OnStop (signal)
if Wn1_Hndl then DestroyTable (Wn1_Hndl) end
StopFlag = true
return 1000 -- 1 sec
end
local function ShowWin (cols)
for k = 1, #Desk do
local calCode = Desk[k][Entries[Wn1_Field1]]
if calCode:sub (3,3) == "0" then
calCode = calCode:sub (1,2) .
(
Читать дальше )